Exerccios 8. Reamostragem e Simulao
#-------------------------------------------------------------------------------------------------
#Exerccio 1
#-------------------------------------------------------------------------------------------------

eutad <-  read.table("palmadulto.txt", header= TRUE, as.is = TRUE, sep= "\t", dec= ".")
head(eutad)
str(eutad)#verificando estrutura dos dados

#1.2. Crie o objeto para guardar as distncias entre cada indivduo:
dist=matrix(NA, ncol=102, nrow=102)

#1.3. Calcule a distncia observada entre cada indivduo e guarde o resultados em dist:

for(i in 1:101)
    {
        for(j in (i+1):102)
            {
                difx2=(eutad$gx[i]-eutad$gx[j])^2
                dify2=(eutad$gy[i]-eutad$gy[j])^2
                dist[i,j]<-sqrt(difx2 + dify2)
                dist[j,i]<-sqrt(difx2 + dify2)
            }
          
    }

#1.4. Verifique o objeto dist e calcule o parmetro chamado de distncia mdia do vizinho mais prximo (MNN):
dist
(nn<-apply(dist, 1, min, na.rm=TRUE))
(mnn<-mean(nn))#[1] 14.76015

################### Simulando ############
  
#1.5. Crie um vetor resultado, com 1000 NA's, para guardar os valores de cada simulao.
 
resultado <- rep(NA,1000)
resultado

#1.6. Guarde o valor observado na primeira posio de resultado;

resultado[1] <- (mnn)
resultado

#1.7. Crie um ciclo com contador (k) que vai de 2 a 1000;

for(k in 2:1000)
    {
     xsim <- round(runif(102, min = 0, max = 320),1) #1.8.1. Crie o objetos xsim, um vetor com valores amostrados aleatoriamente de uma distribuio uniforme de 0 a 320 (o tamanho x da parcela), arredondando o valor para uma casa decimal2). Lembre-se de sortear o mesmo quantidade de valores que a populao de palmito observado;
     ysim <- round(runif(102, min = 0, max = 320),1) #1.8.2. Faa o mesmo que no passo anterior e guarde no objeto ysim;
     rdist=matrix(NA, ncol=102, nrow=102) #1.8.3. Como no tpico anterior, crie uma matriz para guardar as distncias entre cada valor xy simulados;
     for(a in 1:101)#1.8.3. Crie os ciclos para o calculo das distncias como no tpico anterior;
         {
          for(b in (a+1):102)
              {
               rdifx2=(eutad$gx[a]-eutad$gx[b])^2
               rdify2=(eutad$gy[a]-eutad$gy[b])^2
               rdist[a,b]<-sqrt(rdifx2 + rdify2)
               rdist[b,a]<-sqrt(rdifx2 + rdify2)
              }
          }
      (rnn<-apply(rdist, 1, min, na.rm=TRUE))
      (resultado[k] <- mean(rnn))#1.8.4. Guarde o valor da distncia mdia do vizinho mais prximo dos dados simulados na posio k do vetor resultado;
   }#1.8.5. Feche o ciclo.
resultado

#1.9. Faa um histograma dos valores simulados e coloque uma linha vermelha vertical na posio do valor observado;
media <- mean(resultado)
simu <- resultado - media
hist(simu)
abline (v=resultado[1], lty=2, col="red")

#1.10. Calcule a probabilidade de uma distribuio espacial aleatria gerar valores iguais ou mais extremos do que o valor MNN observado.

unicaudal=sum(resultado>=resultado[1])
unicaudal
p.uni=unicaudal/length(resultado)
p.uni
p.bi

#-------------------------------------------------------------------------------------------------
#Exerccio 2. Simulando o teste de uma regresso linear
#-------------------------------------------------------------------------------------------------
#upload dos dados
animais <-  read.table("animais.txt", header= TRUE, as.is = TRUE, sep= ";", dec= ",")
animais
str(animais)

animais = na.omit(animais)#retirando NAs

logbrain = log(animais$brain) #log de brain
logbody = log(animais$body) #log de body

#2.1. Calcule a inclinao da relao log(brain) ~ log(body) 
inclinacao = sum((logbody - mean(logbody))*(logbrain - mean(logbrain)))/sum((logbody-mean(logbody))^2)

coeficiente <- coef(lm(logbrain~logbody))

#2.2. Crie um vetor para guardar o resultado de simulaes;
res.inclinacao <- rep(NA, 1000)

#2.3. Guarde o valor observado no objeto criado em 2.2
res.inclinacao[1] <-inclinacao 

#2.4. Abra um ciclo de 2 a 1000;

for (i in 2:1000)
    {
    sim_brain <- sample(animais$brain)#2.5. Desordene o vetor brain e guarde no objeto sim_brain;
    resp.inclinacao[i] <- coef(lm(log(sim_brain)~log(body), data=animais))[[2]]#2.6. Calcule a inclinao entre o log(sim_brain) ~ log(body) e guarde no vetor resultado
    }#2.7. Feche o ciclo;

#2.8. Faa o histograma dos valores simulados e compare com o valor observado da inclinao da relao;

hist(resp.inclinacao)
abline(v = inclinacao, col="red")

#2.9. Calcule a probabilidade da inclinao observada ter sido gerada por variveis que so independentes

p=sum(resp.inclinacao>=resp.inclinacao[1])/length(resp.inclinacao)





